// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.statement.SQLConstraint;
// import com.alibaba.druid.sql.ast.statement.SQLTableElement;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject;
#pragma once
#include "../OracleSQLObject.h"
#include "../../../../ast/statement/SQLConstraint.h"
#include "../../../../ast/statement/SQLTableElement.h"

class OracleConstraint_Initially
{
public:
  static OracleConstraint_Initially_ptr DEFERRED;
  static OracleConstraint_Initially_ptr IMMEDIATE;

  string_ptr name;
  uint64_t mask;
  OracleConstraint_Initially(uint64_t mask, string_ptr name);
};

class OracleConstraint : virtual public OracleSQLObject, virtual public SQLConstraint, virtual public SQLTableElement
{
public:
  virtual SQLName_ptr getExceptionsInto() {};

  virtual void setExceptionsInto(SQLName_ptr exceptionsInto) {};

  virtual BOOL_ptr getDeferrable() {};

  virtual void setDeferrable(BOOL_ptr enable) {};

  virtual BOOL_ptr getEnable() {};

  virtual void setEnable(BOOL_ptr enable) {};

  virtual BOOL_ptr getValidate() {};

  virtual void setValidate(BOOL_ptr validate) {};

  virtual OracleConstraint_Initially_ptr getInitially() {};

  virtual void setInitially(OracleConstraint_Initially_ptr value) {};

  virtual OracleUsingIndexClause_ptr getUsing() {};

  virtual void setUsing(OracleUsingIndexClause_ptr using_) {};

  virtual SQLObject_ptr clone() {};
};
